package tests;


import static org.junit.Assert.*;

import java.util.Calendar;

import metier.Film;
import metier.Personne;
import metier.RecompensePersonne;

import org.junit.Before;
import org.junit.Test;

import DAO.DAOFilmJPA;
import DAO.DAOJPA;
import DAO.DAOPersonneJPA;
import DAO.DAORecompensePersonne;
import DAO.DAORecompensePersonneJPA;


public class testDAORecompensePersonne {

	private DAORecompensePersonne dao;
	private DAOFilmJPA daofilm;
	private DAOPersonneJPA daopersonne;
	private RecompensePersonne rec1;
	private Film film;
	private Personne personne;

	@Before
	public void init() {
		
		this.film = new Film("titreFilm",2014,20);
		this.personne = new Personne("nom","prenom",Calendar.getInstance().getTime());
		this.rec1 = new RecompensePersonne(film, 2015, "TYPE_CESAR","RAISON_OEUVRE", personne);

				
		this.dao = DAORecompensePersonneJPA.getInstance();
		this.daofilm = DAOFilmJPA.getInstance();
		this.daopersonne = DAOPersonneJPA.getInstance();
		DAOJPA.viderBase();
	}
	
	@Test
	public void testRecompense() {
		// Pr�conditions
		assertEquals(0,dao.getNombreRecompenses());	// rien dans la table
		
		daopersonne.save(personne);
		daofilm.save(film);
		dao.save(rec1);
		 
		// Postconditions
		assertEquals(1,dao.getNombreRecompenses());	// Un article est dans la table
		assertNotEquals(-1, rec1.getId());	// Le code de l'auteur contient la cl� g�n�r�e par la BD
		
		// On v�rifie que l'auteur de la table est bien celui du test
		RecompensePersonne	rec2 = dao.get(rec1.getId());	
		assertEquals(rec1, rec2);			// C'est bien le m�me code
		
		// On supprime l'objet que l'on vient de consulter
		dao.remove(rec2);				
		
		assertEquals(0,dao.getNombreRecompenses());	// La table est bien vide
		
		// Attention, on ne peut rien faire pour auteur1. Il parait toujours manag�...
	}
	
	@Test(expected=IllegalArgumentException.class)
	public void testSaveException() {

		dao.save(rec1);
		assertEquals(1,dao.getNombreRecompenses());

		// Ajouter le m�me auteur lance une exception
		dao.save(rec1);
		assertEquals(1,dao.getNombreRecompenses());
	}	
	
	@Test(expected=IllegalArgumentException.class)
	public void testRemoveException() {
	
		dao.save(rec1);
		assertEquals(1,dao.getNombreRecompenses());

		// Supprimer 2 fois le m�me auteur lance une exception 
		dao.remove(rec1);
		assertEquals(0,dao.getNombreRecompenses());
		
		dao.remove(rec1);
	}

}